#include "type.h"
#include "const.h"
#include "protected.h"

public void* memcpy(void *pDst, void* pSrc, int iSize);

public void disp_str(char *str);

public u8 gdt_ptr[6];

public Descriptor gdt[GDT_SIZE];

public void cstart()
{
	disp_str("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
	"--------------\"cstart\" begins ------\n");
	
	// 将loader中的gdt拷贝到新的gdt中
	memcpy(&gdt, (void*)(*((u32 *) (&gdt_ptr[2]))),
		*((u16*) (&gdt_ptr[0])) + 1);
	u16* p_gdt_limit = (u16*) (&gdt_ptr[0]);
	u32* p_gdt_base = (u32*) (&gdt_ptr[2]);
	*p_gdt_limit = GDT_SIZE * sizeof(Descriptor) - 1;
	*p_gdt_base = (u32) &gdt;
}